home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / util / cdity / IFX.lha / IFX / AmigaE / speak / speech.e < prev    next >
Text File  |  1998-01-02  |  1KB  |  61 lines

  1. OPT MODULE
  2.  
  3. MODULE 'exec', 'exec/ports', 'exec/io'
  4. MODULE 'devices/narrator', 'translator'
  5.  
  6. OBJECT speech
  7.     rate            :INT
  8.     pitch            :INT
  9.     mode            :INT
  10.     sex                :INT
  11.     volume            :INT
  12. ENDOBJECT
  13.  
  14. EXPORT PROC speak(str:PTR TO CHAR) OF speech HANDLE
  15.     DEF ioreq:PTR TO ndi, port:PTR TO mp
  16.     DEF phonetic:PTR TO CHAR, len
  17.     
  18.     NEW phonetic[1024]
  19.     
  20.     -> First open translator.library
  21.     translatorbase := OpenLibrary('translator.library', 0)
  22.     IF translatorbase=NIL THEN Raise("LIB")
  23.     
  24.     Translate(str, StrLen(str), phonetic, 1024)
  25.     
  26.     -> Create a message port for replies
  27.     port := CreateMsgPort()
  28.     IF port=NIL THEN Raise("PORT")
  29.     
  30.     -> Create an IORequest
  31.     ioreq := CreateIORequest(port, SIZEOF ndi)
  32.     IF ioreq=NIL THEN Raise("REQ")
  33.     
  34.     -> Open the Device
  35.     IF OpenDevice('narrator.device', 0, ioreq, 0) THEN Raise("DEV")
  36.     
  37.     -> Prepare to write
  38.     ioreq.iostd.command := CMD_WRITE
  39.     ioreq.iostd.data     := phonetic
  40.     ioreq.iostd.length     := StrLen(phonetic)
  41.     ioreq.chmasks     := [3, 5, 10, 12]:CHAR
  42.     ioreq.nummasks    := 4
  43.     ioreq.rate         := self.rate
  44.     ioreq.pitch     := self.pitch
  45.     ioreq.mode         := self.mode
  46.     ioreq.sex         := self.sex
  47.     ioreq.volume     := self.volume
  48.     
  49.     -> Do it.
  50.     DoIO(ioreq)
  51.     
  52. EXCEPT DO
  53.     IF port             THEN DeleteMsgPort(port)
  54.     IF ioreq
  55.         CloseDevice(ioreq)
  56.         DeleteIORequest(ioreq)
  57.     ENDIF
  58.     IF translatorbase    THEN CloseLibrary(translatorbase)
  59.     IF exception THEN RETURN exception
  60. ENDPROC NIL
  61.